package com.zhu.oj.common.constant;


import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import lombok.Getter;

/**
 * 判题信息消息枚举
 * 用于定义判题结果的各种状态
 * @author ZZX
 */
@Getter // 使用 Lombok 自动生成 getter 方法
public enum JudgeInfoMessageEnum {

    // 判题通过
    ACCEPTED("Accepted", "通过"),
    // 答案错误
    WRONG_ANSWER("Wrong Answer", "答案错误"),
    // 时间超限
    TIME_LIMIT_EXCEEDED("Time Limit Exceeded", "时间超限"),
    // 内存超限
    MEMORY_LIMIT_EXCEEDED("Memory Limit Exceeded", "内存超限"),
    // 输出超限
    OUTPUT_LIMIT_EXCEEDED("Output Limit Exceeded", "输出超限"),
    // 运行时错误
    RUNTIME_ERROR("Runtime Error", "运行时错误"),
    // 编译错误
    COMPILE_ERROR("Compile Error", "编译错误"),
    // 系统错误（沙箱、判题机内部错误等）
    SYSTEM_ERROR("System Error", "系统错误");


    private final String value;
    private final String text;

    JudgeInfoMessageEnum(String value, String text) {
        this.value = value;
        this.text = text;
    }

    /**
     * 获取所有枚举值的列表
     * @return
     */
    public static List<String> getValues() {
        return Arrays.stream(values()).map(item -> item.value).collect(Collectors.toList());
    }

    /**
     * 根据 value 获取枚举
     * @param value
     * @return
     */
    public static JudgeInfoMessageEnum getEnumByValue(String value) {
        if (value == null) {
            return null;
        }
        for (JudgeInfoMessageEnum anEnum : JudgeInfoMessageEnum.values()) {
            if (anEnum.value.equals(value)) {
                return anEnum;
            }
        }
        return null;
    }

    // getValue() 和 getText() 方法会由 Lombok 的 @Getter 自动生成
}